#ifndef _SYS_MMAN_H
#include <misc/sys/mman.h>

#ifndef _ISOMAC
/* Now define the internal interfaces.  */
/*
 *  功能：创建文件/设备与进程内存之间的映射关系。
 *   __addr：映射的起始地址（如果希望由内核选择地址，则为 NULL）。
 *    __len：映射的长度。
 *   __prot：映射的权限（例如 PROT_READ、PROT_WRITE、PROT_EXEC 等）。
 *  __flags：控制映射行为的标志位（例如 MAP_SHARED、MAP_PRIVATE、MAP_FIXED 等）。
 *     __fd：所映射文件的文件描述符（如果是匿名映射，则为 -1）。
 * __offset：所映射文件中的偏移量。
 */
extern void *__mmap (void *__addr, size_t __len, int __prot,
		     int __flags, int __fd, __off_t __offset);
extern void *__mmap64 (void *__addr, size_t __len, int __prot,
		       int __flags, int __fd, __off64_t __offset);
/*
 * 功能：解除映射，释放内存。
 *    addr：映射的起始地址。
 *  length：映射的长度。
 */
extern int __munmap (void *__addr, size_t __len);
/*
 *  功能：用于修改指定内存区域的访问权限。它通常用于保护代码和数据不被非法或无意识地修改。当一个进程试图对受保护的内存进行不允许的操作时，会产生一个段错误（segmentation fault）信号。
 *  __addr：欲更改的内存区域的起始地址。
 *  __len：欲更改的内存区域的长度。
 *  __prot：欲更改的内存区域的新的访问权限（例如 PROT_READ、PROT_WRITE、PROT_EXEC 等）。
 */
extern int __mprotect (void *__addr, size_t __len, int __prot);

extern int __madvise (void *__addr, size_t __len, int __advice);
libc_hidden_proto (__madvise)

/* This one is Linux specific.  */
extern void *__mremap (void *__addr, size_t __old_len,
		       size_t __new_len, int __flags, ...);
#endif

#endif
